#!/usr/bin/env python
# -*- coding:utf-8 -*-

# file:进程池中的进程通信.py
# author: 马国鑫
# datetime:2022/3/30 23:48
# software: PyCharm

"""
this is function  description 
"""

# import module your need

import time
import multiprocessing


def write_queue(queue):
    for i in range(10):
        if queue.full():
            print('队列已满！')
            break
        queue.put(i)
        print('队列已经加入:',i)
        time.sleep(0.5)


def read_queue(queue):
    while True:
        if queue.qsize() == 0:
            print('队列空')
            break
        data = queue.get()
        print('已经读取',data)
        time.sleep(0.5)


if __name__ == '__main__':
    # 创建进程池
    pool = multiprocessing.Pool(2)
    # 创建进程池中的队列
    queue = multiprocessing.Manager().Queue(5)
    # 使用进程池执行任务

    # 同步方式 因为执行顺序有先后，所以就不需要用join方法
    # pool.apply(write_queue,(queue,))
    # pool.apply(read_queue,(queue,))
    # 异步方式
    # apply_async()方法返回值是ApplyResult对象，该对象有一个wait方法
    # 这个wait()方法和join方法相似，必须执行完当前进程才能执行新的进程
    result = pool.apply_async(write_queue,(queue,))
    result.wait()
    pool.apply_async(read_queue,(queue,))

    pool.close()
    pool.join()

